In a well-known client-server relationship between two or more computers, a server computer (“server”) executes a server program and provides a service to one or more client computers (each a “client”), each of which executes a client program. Generally the communication between the client and server computers occurs over a conventional public access computer communication network, for example the Internet, or over a conventional private-access computer communication network, for example a local area network, or over combinations of both public and private networks. In such a client-server relationship, one computer could be a client for some services and a server for other services. Typical services provided in a client server relationship include file services, database services, and Hypertext Transfer Protocol (HTTP) services.
In many circumstances, multiple servers are available to supply the services to clients. Multiple servers may be employed to accommodate the volume of requests for services from clients and to improve the quality and performance of the service to the clients. There are many well-known ways to configure multiple servers to provide a service. Often a single server is designated as a principal or main server from which the other secondary servers obtain substantially-equivalent copies of the data and information needed to provide the service to clients.
One type of secondary server is a cache server. A cache server stores a substantially identical copy or copies of the data and programs resident on the principal server. A cache server may periodically communicate with the principal server to update the copy of the data stored on the cache server. A cache server responds to a service request from a client without necessarily communicating with a principal server to supply the stored data or other service that the client has requested. Another type of secondary server is a proxy server. Proxy servers forward service requests from the client to the principal server, but many proxy servers may also have a caching capability to store some data received from the principal server. Secondary servers typically utilize well-known techniques for eliminating expired or outdated data when the data stored on the principal server changes.
There are many reasons to set up a secondary server. Often, some penalty is avoided or reduced by having clients access the secondary server instead of the principal server. For example, the penalty may be unacceptably high network latency between the clients and the principal server due to a large physical distance and/or large number of network hops and/or traffic between the clients and the principal server. The penalty may also be security-related, such as a greater risk of unintended information exposure if the communication between clients and the principal server traverses unprotected networks.
It is often desirable in a client-server relationship to avoid storing on each client the address or location information of a particular server that each client accesses, since the location information of a server may change. The location of a server may be changed to improve the performance of the client-server relationship by reducing the number of separate network communications or hops between the client and server, for example. The location of a server may be changed by moving the service associated with the server to a different server, or the network address of a physical server may be changed, as other examples. The main disadvantage to storing the location of a server on a client is that location information on each of the multiple clients must be changed when the location of the server or service is changed.
Storing location information on clients can be avoided through the use of a location server. Location servers respond to queries from clients by supplying the location information of a primary or secondary server. If the location information for a particular resource changes, only the location information on the location server need be changed to enable the new location information to be supplied to multiple clients. The necessity to change the location information on each of many clients is avoided by the use of a location server. To distinguish location servers from the other servers, the other non-location servers which deliver the service are referred herein as payload servers. Location servers, like payload servers, can also be set up in a principal-secondary relationship.
The typical location information supplied is the address or location of an object. An object is a particular resource which resides on a payload server and which the client wishes to access and use. Some example objects are a database, a filesystem, or a service. Objects which are duplicated in a principal-secondary relationship are often each referred to as “instances” of the object. The object location typically contains the arbitrary name which identifies the particular resource and the network address of a payload server hosting or supplying the object. In a conventional Transport Control Protocol/Internet Protocol (TCP/IP) network, the IP address or the hostname of the payload server hosting the object at a particular point in time is part of the object location information. The hostname is a variant of a network address. Each computer has a network address, and the use of network addresses makes it possible to establish direct communications between individual clients and servers in a network.
For a client to access an object on a payload server whose location is stored on a location server, the client must have previously obtained information of the object name and the network address of the location server. The client queries the location server using its network address to obtain the location of the object. The object location supplied by the location server makes it possible for the client to thereafter directly access the payload server hosting the object and to obtain the requested services. The use of a location server also allows resources to be moved or distributed efficiently and periodically among multiple payload servers without changing the published location information associated with the resource.
Oftentimes it is desirable to have a group of clients obtain services from a secondary payload server instead of from a principal payload server that the clients have previously obtained services from. A difficulty arises in the case where the clients have been directed to the principal payload server by a location server that is managed by an uncooperative or unknown administrative entity. The difficulty is that the clients cannot be easily redirected to use the secondary payload server instead of the principal payload server if the location information sent from the location server cannot be changed. In this circumstance, each of the clients must be programmed to access the secondary payload server directly. Updating numerous clients with location information to refer them to the secondary payload server incurs some type of penalty, and in some circumstances may be infeasible or prohibitively costly.
Programming clients to access different payload servers from ones they have been previously programmed to access can present a significant penalty in the form of administrative difficulty, particularly when there are a relatively large number of local clients, which is typically the case in a large organization which makes intensive use of computers. When a remote location server is involved it may be an almost impossible task to change the object location information for requests only from local clients, because the remote location server will also be responding to requests from other non-local clients which should not be redirected.
Local and remote computers are typically located at physically or geographically different sites, but under some circumstances there may be no significant physical or geographical separation. However in each case, the local computers are administered and controlled locally by one administrative entity, and the remote computers are administered and controlled remotely by a different administrative entity. Communication between the local and remote computers usually entails a penalty, such as additional cost and network latency, compared to communications between computers only at the local site.
Responses to service requests from non-local clients must continue to be directed only to a remote principal payload server, and not to a local secondary payload server, because the local secondary payload server is often intended for the exclusive use and benefit of local clients. Furthermore, the remote location server is under the control of an administrative entity different from that which controls the local secondary payload server, thereby making it very unlikely that the remote location server will be programmed to respond to requests from local clients in a manner different from the manner that it responds to requests from non-local computers, especially where there is no relationship between the administrative entities.